//
// Description: 228. 汇总区间
// Created by Loading on 2025/3/24.
//

#include <bits/stdc++.h>

using namespace std;

vector<string> summaryRanges(vector<int> &nums) {
    vector<string> res;
    int n = nums.size();
    if (n == 0) {
        return res;
    }
    // 每个区间的起始
    int num = nums[0];
    for (int i = 1; i < nums.size(); ++i) {
        /// 使用 nums[i] - nums[i - 1] 可能会越界
        if (i > 0 && nums[i] - 1 > nums[i - 1]) {
            if (nums[i - 1] == num) { // 单个数字区间
                res.emplace_back(to_string(num));
            } else { // 多个数字区间
                res.emplace_back(to_string(num) + "->" + to_string(nums[i - 1]));
            }
            // 更新区间起始
            num = nums[i];
        }
    }
    // 处理最后一个元素
    if (num == nums.back()) {
        res.emplace_back(to_string(num));
    } else {
        res.emplace_back(to_string(num) + "->" + to_string(nums.back()));
    }

    return res;
}

int main() {
    vector<int> nums{-2147483648, 0, 2, 3, 4, 6, 8, 9};

    auto res = summaryRanges(nums);

    for (const auto &s : res) {
        cout << s;
        if (s != res.back()) {
            cout << ',';
        }
    }

    return 0;
}
